package com.tabnet.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.gammeproduit.AppelOffre;
import com.tabnet.beans.gammeproduit.PropositionGamme;
import com.tabnet.beans.personnes.Client;
import com.tabnet.beans.personnes.Fournisseur;
import com.tabnet.beans.personnes.Gestionnaire;
import com.tabnet.beans.produit.GammeProduit;
import com.tabnet.dao.DAOAppelOffre;
import com.tabnet.dao.DAOClient;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.dao.DAOFournisseur;
import com.tabnet.dao.DAOGammeProduit;
import com.tabnet.dao.DAOGestionnaire;
import com.tabnet.dao.DAOPropositionGamme;
import com.tabnet.form.ConnexionGestForm;

/**
 * Servlet qui s'occupe de connecter le gestionnaire à sa partie administration
 *
 */
public class ConnexionGest extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
    public static final String ATT_USER        		= "gestionnaire";
    public static final String ATT_FORM         	= "form";
    public static final String ATT_SESSION_USER 	= "sessionGestionnaire";
    public static final String SESSION_FOURNISSEURS = "fournisseurs";
    public static final String ATT_LES_PROPS		= "propositions";
    public static final String ATT_LES_APPELS		= "appelsOffre";
    public static final String ATT_LES_CLIENTS		= "clients";
    public static final String ATT_LES_GAMMES 		= "gammes";
    
    public static final String VUE              	= "/WEB-INF/connexionGest.jsp";
    public static final String VUE_SUCCES 	    	= "/admin/accueil.jsp";

    private DAOFournisseur fournDao;
    private DAOGestionnaire gestDao;
    private DAOClient clientDao;
    private DAOAppelOffre  AppelDao;
    private DAOPropositionGamme  proposDao;
    private DAOGammeProduit gammeDao;

    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Utilisateur */
        
    }
    
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* Affichage de la page de connexion */
        this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
    }

    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

    	try {
			this.fournDao = DAOFactory.getInstance().getFournisseurDAO();
			this.AppelDao = DAOFactory.getInstance().getAppelOffreDAO();
			this.proposDao = DAOFactory.getInstance().getPropositionGammeDAO();
			this.clientDao = DAOFactory.getInstance().getClientDAO();
			this.gammeDao = DAOFactory.getInstance().getGammeProduitDAO();
			this.gestDao = DAOFactory.getInstance().getGestionnaireDAO();
		} catch (DAOException e1) {
			e1.printStackTrace();
		}
    	
    	/* Préparation de l'objet formulaire */
    	ConnexionGestForm form = new ConnexionGestForm(gestDao);

        /* Traitement de la requête et récupération du bean en résultant */
        Gestionnaire gest = null;
		try {
			gest = form.connecterGest( request );
		} catch (DAOException e1) {
			e1.printStackTrace();
		}

        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();

        /* Stockage du formulaire et du bean dans l'objet request */
        request.setAttribute( ATT_FORM, form );
        request.setAttribute( ATT_USER, gest );

        /**
         * Si aucune erreur de validation n'a eu lieu, alors ajout du bean
         * gestionnaire à la session, sinon suppression du bean de la session.
         */
        if ( form.getErreurs().isEmpty() ) {
            session.setAttribute( ATT_SESSION_USER, gest );
            
            // ajout des objets en session
            HashMap<String, Fournisseur> lesFournisseurs = null;
            HashMap<String, PropositionGamme> lesPropositions = null;
            HashMap<String, AppelOffre> lesAppels = null;
            Map<Integer, Client> lesClients = null;
            Map<String, GammeProduit> lesGammes = null;
			try {
				lesFournisseurs = fournDao.lister();
				lesAppels = AppelDao.listerAppelAdmin();
				lesPropositions = proposDao.listerPropositions();
				lesClients = clientDao.getClients();
				lesGammes = gammeDao.getGammeProduits(false);
			} catch (DAOException e) {
				e.printStackTrace();
			}
			
            
            session.setAttribute( ATT_LES_APPELS, lesAppels );
            session.setAttribute( ATT_LES_PROPS, lesPropositions );
            session.setAttribute( SESSION_FOURNISSEURS, lesFournisseurs );
            session.setAttribute( ATT_LES_CLIENTS, lesClients );
            session.setAttribute( ATT_LES_GAMMES, lesGammes );
            
            response.sendRedirect( request.getContextPath() + VUE_SUCCES );
        } else {
            session.setAttribute( ATT_SESSION_USER, null );
            this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
        }
    }
}
